/*
 *  POJ3278: Catch That Cow
 */

/*-------- Includes --------*/
#include <iostream>
#include <queue>

using namespace std;

/*-------- Types --------*/
struct Status {
    int p;  // position
    int s;  // number of steps
public:
    Status(int pp, int ss) : p(pp), s(ss) {}
};

/*-------- Global Variables --------*/

/*-------- Function Prototypes --------*/

/*-------- Main Function --------*/
int main(int argc, char const *argv[])
{
    int N, K;

    cin >> N >> K;

    bool flag[100001] = {false};
    queue<Status> que;

    que.push(Status(N, 0));
    flag[N] = true; // mark

    while (!que.empty()) {
        // retrieve element
        Status stat = que.front(); que.pop();

        // reach
        if (stat.p == K) { cout << stat.s << endl; break; }

        if (stat.p > 0 && !flag[stat.p - 1]) {
            que.push(Status(stat.p - 1, stat.s + 1));
            flag[stat.p - 1] = true;
        }

        if (stat.p < K && !flag[stat.p + 1]) {
            que.push(Status(stat.p + 1, stat.s + 1));
            flag[stat.p + 1] = true;
        }

        if (stat.p < K && stat.p <= 50000 && !flag[stat.p * 2]) {
            que.push(Status(stat.p * 2, stat.s + 1));
            flag[stat.p * 2] = true;
        }
    }

    return 0;
}

/*-------- Functions --------*/

